--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
scripts/build/generate_service_worker.mjs 2603a45cb9b107f2eb9dccabe1531f1c2473eb2c (2603a45c) Text, 5.64 KB
T8b949e// SPDX-License-Identifier: 0BSD
T8b949e/**
* Generate MeshChatX service-worker.js from shared PWA modules + bootstrap template.
*/
Tff7b72import Te6edf3fs Tff7b72from Ta5d6ff"node:fs"Tb4b4b4;
Tff7b72import Te6edf3path Tff7b72from Ta5d6ff"node:path"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3fileURLToPath Tb4b4b4} Tff7b72from Ta5d6ff"node:url"Tb4b4b4;
Tff7b72const Te6edf3__dirname Tff7b72= Te6edf3pathTb4b4b4.Te6edf3dirnameTb4b4b4(Te6edf3fileURLToPathTb4b4b4(Tff7b72importTb4b4b4.Te6edf3metaTb4b4b4.Te6edf3urlTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3REPO_ROOT Tff7b72= Te6edf3pathTb4b4b4.Te6edf3resolveTb4b4b4(Te6edf3__dirnameTb4b4b4, Ta5d6ff"../.."Tb4b4b4)Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3SW_TEMPLATE_PATH Tff7b72= Te6edf3pathTb4b4b4.Te6edf3joinTb4b4b4(
Te6edf3REPO_ROOTTb4b4b4,
Ta5d6ff"meshchatx"Tb4b4b4,
Ta5d6ff"src"Tb4b4b4,
Ta5d6ff"frontend"Tb4b4b4,
Ta5d6ff"sw"Tb4b4b4,
Ta5d6ff"service-worker.template.js"
Tb4b4b4)Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3SW_POLICY_PATH Tff7b72= Te6edf3pathTb4b4b4.Te6edf3joinTb4b4b4(
Te6edf3REPO_ROOTTb4b4b4,
Ta5d6ff"meshchatx"Tb4b4b4,
Ta5d6ff"src"Tb4b4b4,
Ta5d6ff"frontend"Tb4b4b4,
Ta5d6ff"js"Tb4b4b4,
Ta5d6ff"pwa"Tb4b4b4,
Ta5d6ff"swCachePolicy.js"
Tb4b4b4)Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3SW_RUNTIME_PATH Tff7b72= Te6edf3pathTb4b4b4.Te6edf3joinTb4b4b4(
Te6edf3REPO_ROOTTb4b4b4,
Ta5d6ff"meshchatx"Tb4b4b4,
Ta5d6ff"src"Tb4b4b4,
Ta5d6ff"frontend"Tb4b4b4,
Ta5d6ff"js"Tb4b4b4,
Ta5d6ff"pwa"Tb4b4b4,
Ta5d6ff"swShellRuntime.js"
Tb4b4b4)Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3SW_PUBLIC_PATH Tff7b72= Te6edf3pathTb4b4b4.Te6edf3joinTb4b4b4(
Te6edf3REPO_ROOTTb4b4b4,
Ta5d6ff"meshchatx"Tb4b4b4,
Ta5d6ff"src"Tb4b4b4,
Ta5d6ff"frontend"Tb4b4b4,
Ta5d6ff"public"Tb4b4b4,
Ta5d6ff"service-worker.js"
Tb4b4b4)Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3DEFAULT_SHELL_PRECACHE Tff7b72= Tb4b4b4[
Ta5d6ff"/"Tb4b4b4,
Ta5d6ff"/boot-theme.js"Tb4b4b4,
Ta5d6ff"/manifest.json"Tb4b4b4,
Ta5d6ff"/favicons/favicon-512x512.png"Tb4b4b4,
Tb4b4b4]Tb4b4b4;
T8b949e/**
* Strip ESM import/export so modules can be inlined into a classic service worker.
* @param {string} source
* @returns {string}
*/
Tff7b72export Tff7b72function Te6edf3stripEsmForServiceWorkerTb4b4b4(Te6edf3sourceTb4b4b4) Tb4b4b4{
Tff7b72return Tffa657StringTb4b4b4(Te6edf3source Tff7b72|| Ta5d6ff""Tb4b4b4)
Tb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff/^import\s+[\s\S]*?from\s+["'][^"']+["']\s*;?\s*$/gmTb4b4b4, Ta5d6ff""Tb4b4b4)
Tb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff/^export\s+async\s+function\s+/gmTb4b4b4, Ta5d6ff"async function "Tb4b4b4)
Tb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff/^export\s+function\s+/gmTb4b4b4, Ta5d6ff"function "Tb4b4b4)
Tb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff/^export\s+const\s+/gmTb4b4b4, Ta5d6ff"const "Tb4b4b4)
Tb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff/^export\s+\{[^}]*\}\s*;?\s*$/gmTb4b4b4, Ta5d6ff""Tb4b4b4)
Tb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff/^\/\/ SPDX-License-Identifier:.*$/gmTb4b4b4, Ta5d6ff""Tb4b4b4)
Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {string} assetsDir absolute path to meshchatx/public/assets
* @returns {string[]}
*/
Tff7b72export Tff7b72function Te6edf3collectAssetPrecacheUrlsTb4b4b4(Te6edf3assetsDirTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3urls Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3assetsDir Tff7b72|| Tff7b72!Te6edf3fsTb4b4b4.Te6edf3existsSyncTb4b4b4(Te6edf3assetsDirTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3urlsTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3walk Tff7b72= Tb4b4b4(Te6edf3dirTb4b4b4, Te6edf3prefixTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3entry Tff7b72of Te6edf3fsTb4b4b4.Te6edf3readdirSyncTb4b4b4(Te6edf3dirTb4b4b4, Tb4b4b4{ Te6edf3withFileTypesTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3abs Tff7b72= Te6edf3pathTb4b4b4.Te6edf3joinTb4b4b4(Te6edf3dirTb4b4b4, Te6edf3entryTb4b4b4.Te6edf3nameTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3rel Tff7b72= Ta5d6ff`Tffd700${Te6edf3prefixTffd700}Ta5d6ff/Tffd700${Te6edf3entryTb4b4b4.Te6edf3nameTffd700}Ta5d6ff`Tb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff/\\/gTb4b4b4, Ta5d6ff"/"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3entryTb4b4b4.Te6edf3isDirectoryTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3walkTb4b4b4(Te6edf3absTb4b4b4, Te6edf3relTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3entryTb4b4b4.Te6edf3isFileTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3urlsTb4b4b4.Te6edf3pushTb4b4b4(Te6edf3relTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4;
Te6edf3walkTb4b4b4(Te6edf3assetsDirTb4b4b4, Ta5d6ff"/assets"Tb4b4b4)Tb4b4b4;
Te6edf3urlsTb4b4b4.Te6edf3sortTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3urlsTb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {{ buildId?: string, precacheUrls?: string[], templatePath?: string }} options
* @returns {string}
*/
Tff7b72export Tff7b72function Te6edf3renderServiceWorkerSourceTb4b4b4(Te6edf3options Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3templatePath Tff7b72= Te6edf3optionsTb4b4b4.Te6edf3templatePath Tff7b72|| Te6edf3SW_TEMPLATE_PATHTb4b4b4;
Tff7b72const Te6edf3buildId Tff7b72= Te6edf3optionsTb4b4b4.Te6edf3buildId Tff7b72|| Ta5d6ff"dev"Tb4b4b4;
Tff7b72const Te6edf3precacheUrls Tff7b72= Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Te6edf3optionsTb4b4b4.Te6edf3precacheUrlsTb4b4b4)
Tff7b72? Te6edf3optionsTb4b4b4.Te6edf3precacheUrls
Tff7b72: Te6edf3DEFAULT_SHELL_PRECACHETb4b4b4;
Tff7b72const Te6edf3template Tff7b72= Te6edf3fsTb4b4b4.Te6edf3readFileSyncTb4b4b4(Te6edf3templatePathTb4b4b4, Ta5d6ff"utf8"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3templateTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"__MESHCHATX_SW_BUILD_ID__"Tb4b4b4) Tff7b72|| Tff7b72!Te6edf3templateTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"__MESHCHATX_SW_PRECACHE_JSON__"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"service-worker template missing injection placeholders"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3policy Tff7b72= Te6edf3stripEsmForServiceWorkerTb4b4b4(Te6edf3fsTb4b4b4.Te6edf3readFileSyncTb4b4b4(Te6edf3SW_POLICY_PATHTb4b4b4, Ta5d6ff"utf8"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3runtime Tff7b72= Te6edf3stripEsmForServiceWorkerTb4b4b4(Te6edf3fsTb4b4b4.Te6edf3readFileSyncTb4b4b4(Te6edf3SW_RUNTIME_PATHTb4b4b4, Ta5d6ff"utf8"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3bootstrap Tff7b72= Te6edf3template
Tb4b4b4.Te6edf3replaceAllTb4b4b4(Ta5d6ff"__MESHCHATX_SW_BUILD_ID__"Tb4b4b4, Tffa657StringTb4b4b4(Te6edf3buildIdTb4b4b4)Tb4b4b4)
Tb4b4b4.Te6edf3replaceAllTb4b4b4(Ta5d6ff"__MESHCHATX_SW_PRECACHE_JSON__"Tb4b4b4, Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Te6edf3precacheUrlsTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4[
Ta5d6ff"// SPDX-License-Identifier: 0BSD"Tb4b4b4,
Ta5d6ff"/* eslint-disable no-restricted-globals */"Tb4b4b4,
Ta5d6ff"/* Generated MeshChatX service worker. Do not edit by hand. */"Tb4b4b4,
Te6edf3policyTb4b4b4,
Te6edf3runtimeTb4b4b4,
Te6edf3bootstrapTb4b4b4,
Tb4b4b4]Tb4b4b4.Te6edf3joinTb4b4b4(Ta5d6ff"\n\n"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {{
* buildId?: string,
* precacheUrls?: string[],
* outfile?: string,
* assetsDir?: string,
* }} options
* @returns {{ outfile: string, buildId: string, precacheUrls: string[] }}
*/
Tff7b72export Tff7b72function Te6edf3writeServiceWorkerTb4b4b4(Te6edf3options Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3outfile Tff7b72= Te6edf3optionsTb4b4b4.Te6edf3outfile Tff7b72|| Te6edf3SW_PUBLIC_PATHTb4b4b4;
Tff7b72const Te6edf3buildId Tff7b72= Te6edf3optionsTb4b4b4.Te6edf3buildId Tff7b72|| Ta5d6ff"dev"Tb4b4b4;
Tff7b72const Te6edf3fromAssets Tff7b72= Te6edf3optionsTb4b4b4.Te6edf3assetsDir Tff7b72? Te6edf3collectAssetPrecacheUrlsTb4b4b4(Te6edf3optionsTb4b4b4.Te6edf3assetsDirTb4b4b4) Tff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3base Tff7b72= Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Te6edf3optionsTb4b4b4.Te6edf3precacheUrlsTb4b4b4) Tff7b72? Te6edf3optionsTb4b4b4.Te6edf3precacheUrls Tff7b72: Te6edf3DEFAULT_SHELL_PRECACHETb4b4b4;
Tff7b72const Te6edf3precacheUrls Tff7b72= Tb4b4b4[Tb4b4b4...Tff7b72new Tffa657SetTb4b4b4(Tb4b4b4[Tb4b4b4...Te6edf3baseTb4b4b4, Tb4b4b4...Te6edf3fromAssetsTb4b4b4]Tb4b4b4)Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3source Tff7b72= Te6edf3renderServiceWorkerSourceTb4b4b4(Tb4b4b4{ Te6edf3buildIdTb4b4b4, Te6edf3precacheUrls Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3fsTb4b4b4.Te6edf3mkdirSyncTb4b4b4(Te6edf3pathTb4b4b4.Te6edf3dirnameTb4b4b4(Te6edf3outfileTb4b4b4)Tb4b4b4, Tb4b4b4{ Te6edf3recursiveTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3fsTb4b4b4.Te6edf3writeFileSyncTb4b4b4(Te6edf3outfileTb4b4b4, Te6edf3sourceTb4b4b4, Ta5d6ff"utf8"Tb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{ Te6edf3outfileTb4b4b4, Te6edf3buildIdTb4b4b4, Te6edf3precacheUrls Tb4b4b4}Tb4b4b4;
Tb4b4b4}
T8b949e/**
* Vite plugin: write a dev SW into public/ and a production SW into outDir after bundle.
* @param {{ buildId: string }} options
*/
Tff7b72export Tff7b72function Te6edf3meshchatxServiceWorkerPluginTb4b4b4(Te6edf3optionsTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3buildId Tff7b72= Te6edf3optionsTff7b72?Tb4b4b4.Te6edf3buildId Tff7b72|| Ta5d6ff"dev"Tb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"meshchatx-service-worker"Tb4b4b4,
Te6edf3buildStartTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3writeServiceWorkerTb4b4b4(Tb4b4b4{
Te6edf3buildIdTff7b72: Ta5d6ff"dev"Tb4b4b4,
Te6edf3precacheUrlsTff7b72: Te6edf3DEFAULT_SHELL_PRECACHETb4b4b4,
Te6edf3outfileTff7b72: Te6edf3SW_PUBLIC_PATHTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3closeBundleTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3outDir Tff7b72= Te6edf3pathTb4b4b4.Te6edf3joinTb4b4b4(Te6edf3REPO_ROOTTb4b4b4, Ta5d6ff"meshchatx"Tb4b4b4, Ta5d6ff"public"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3assetsDir Tff7b72= Te6edf3pathTb4b4b4.Te6edf3joinTb4b4b4(Te6edf3outDirTb4b4b4, Ta5d6ff"assets"Tb4b4b4)Tb4b4b4;
Te6edf3writeServiceWorkerTb4b4b4(Tb4b4b4{
Te6edf3buildIdTb4b4b4,
Te6edf3assetsDirTb4b4b4,
Te6edf3precacheUrlsTff7b72: Te6edf3DEFAULT_SHELL_PRECACHETb4b4b4,
Te6edf3outfileTff7b72: Te6edf3pathTb4b4b4.Te6edf3joinTb4b4b4(Te6edf3outDirTb4b4b4, Ta5d6ff"service-worker.js"Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3writeServiceWorkerTb4b4b4(Tb4b4b4{
Te6edf3buildIdTff7b72: Ta5d6ff"dev"Tb4b4b4,
Te6edf3precacheUrlsTff7b72: Te6edf3DEFAULT_SHELL_PRECACHETb4b4b4,
Te6edf3outfileTff7b72: Te6edf3SW_PUBLIC_PATHTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────